package com.shlh.saas.service.canton.exhibitor;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.shlh.saas.entity.canton.exhibitor.*;
import com.shlh.saas.entity.canton.exhibitor.BaseCantonFairExhibitor;

import java.util.List;
import java.util.concurrent.ExecutionException;

/**
 * 广交会展商服务接口
 */
public interface CantonFairExhibitorService {
    
    /**
     * 分页查询第125届广交会展商
     * @param companyName 公司名称
     * @param category 类别
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @return 分页结果
     */
//    Page<CantonFairExhibitor125> pageExhibitor125(String companyName, String category, int pageNum, int pageSize);

        /**
     * 分页查询第127届广交会展商
     * @param companyName 公司名称
     * @param category 类别
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @return 分页结果
     */
    Page<CantonFairExhibitor127> pageExhibitor127(String companyName, String category, int pageNum, int pageSize);

    /**
     * 分页查询第128届广交会展商
     * @param companyName 公司名称
     * @param companyType 公司类型
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @return 分页结果
     */
    Page<CantonFairExhibitor128> pageExhibitor128(String companyName, String companyType, int pageNum, int pageSize);
    
    /**
     * 分页查询第131届广交会展商
     * @param companyName 公司名称
     * @param category 类别
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @return 分页结果
     */
//    Page<CantonFairExhibitor131> pageExhibitor131(String companyName, String category, int pageNum, int pageSize);
    
    /**
     * 分页查询第134届广交会展商
     * @param companyName 公司名称
     * @param industry 行业
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @return 分页结果
     */
    Page<CantonFairExhibitor134> pageExhibitor134(String companyName, String industry, int pageNum, int pageSize);
    
    /**
     * 分页查询第135届广交会展商
     * @param companyName 公司名称
     * @param province 省份
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @return 分页结果
     */
    Page<CantonFairExhibitor135> pageExhibitor135(String companyName, String province, int pageNum, int pageSize);
    
    /**
     * 分页查询第136届广交会展商
     * @param companyName 公司名称
     * @param province 省份
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @return 分页结果
     */
    Page<CantonFairExhibitor136> pageExhibitor136(String companyName, String province, int pageNum, int pageSize);
    
    /**
     * 根据ID获取第127届广交会展商
     * @param id ID
     * @return 展商信息
     */
    CantonFairExhibitor127 getExhibitor127ById(Integer id);
    
    /**
     * 根据ID获取第128届广交会展商
     * @param id ID
     * @return 展商信息
     */
    CantonFairExhibitor128 getExhibitor128ById(Integer id);
    
    /**
     * 根据ID获取第131届广交会展商
     * @param id ID
     * @return 展商信息
     */
//    CantonFairExhibitor131 getExhibitor131ById(Integer id);
    
    /**
     * 根据ID获取第134届广交会展商
     * @param id ID
     * @return 展商信息
     */
    CantonFairExhibitor134 getExhibitor134ById(Integer id);
    
    /**
     * 根据ID获取第135届广交会展商
     * @param id ID
     * @return 展商信息
     */
    CantonFairExhibitor135 getExhibitor135ById(Integer id);
    
    /**
     * 根据ID获取第136届广交会展商
     * @param id ID
     * @return 展商信息
     */
    CantonFairExhibitor136 getExhibitor136ById(Integer id);
    
    /**
     * 根据公司名称查询所有届次的广交会展商
     * @param companyName 公司名称
     * @return 展商信息列表（不同届次）
     */
    List<Object> findByCompanyName(String companyName);
    
    /**
     * 在所有字段中搜索关键词
     *
     * @param keyword 搜索关键词
     * @param offset 偏移量
     * @param limit 限制数量
     * @return 符合条件的数据列表
     */
    List<BaseCantonFairExhibitor> searchByKeywordInAllFields(String keyword, int offset, int limit);

    /**
     * 统计所有字段中包含关键词的记录数量
     * 
     * @param keyword 搜索关键词
     * @return 记录总数
     */
    long countByKeywordInAllFields(String keyword);
    
    /**
     * 在所有字段中搜索关键词，并应用其他筛选条件
     * 
     * @param keyword 搜索关键词
     * @param sessionInfo 广交会届数
     * @param category 产品类别
     * @param companyType 公司类型
     * @param companyScale 公司规模
     * @param offset 偏移量
     * @param limit 限制数量
     * @return 符合条件的数据列表
     */
    List<BaseCantonFairExhibitor> searchByKeywordInAllFieldsWithFilters(String keyword, String product,
            String sessionInfo, String category, String companyType, String companyScale, String hasContact,
            int offset, int limit) throws ExecutionException, InterruptedException;
    
    /**
     * 统计所有字段中包含关键词和其他筛选条件的记录数量
     *
     * @param keyword 搜索关键词
     * @param sessionInfo 广交会届数
     * @param category 产品类别
     * @param companyType 公司类型
     * @param companyScale 公司规模
     * @return 记录总数
     */
    long countByKeywordInAllFieldsWithFilters(String keyword,  String product,
            String sessionInfo, String category, String companyType, String companyScale, String hasContact);

    /**
     * 导出专用：在所有字段中搜索关键词（返回完整敏感信息，不脱敏）
     *
     * @param keyword 搜索关键词
     * @param offset 偏移量
     * @param limit 限制数量
     * @return 符合条件的数据列表（包含完整敏感信息）
     */
    List<BaseCantonFairExhibitor> searchByKeywordInAllFieldsForExport(String keyword, String product, int offset, int limit);

    /**
     * 导出专用：在所有字段中搜索关键词，并应用其他筛选条件（返回完整敏感信息，不脱敏）
     *
     * @param keyword 搜索关键词
     * @param sessionInfo 广交会届数
     * @param category 产品类别
     * @param companyType 公司类型
     * @param companyScale 公司规模
     * @param offset 偏移量
     * @param limit 限制数量
     * @return 符合条件的数据列表（包含完整敏感信息）
     */
    List<BaseCantonFairExhibitor> searchByKeywordInAllFieldsWithFiltersForExport(String keyword, String product,
            String sessionInfo, String category, String companyType, String companyScale, String hasContact,
            int offset, int limit) throws ExecutionException, InterruptedException;
            
    /**
     * 获取参展商完整联系信息
     * 
     * @param exhibitorId 参展商ID
     * @param sessionNumber 届数
     * @param fieldName 字段名称
     * @return 完整联系信息
     */
    String getFullContactInfo(Long exhibitorId, Integer sessionNumber, String fieldName);
} 